Ma domotique avec le système Angharad, troisième génération

Posté par  (site web personnel) . Édité par Davy Defaud, Benoît Sibaud, ZeroHeure, palm123 et tuiu pol. Modéré par ZeroHeure. Licence CC By‑SA.
33
30
sept.
2016
Do It Yourself

Angharad gère les lumières, les thermostats, les interrupteurs, les capteurs, les images des caméras, la musique.

C’est mon système domotique maison à base de C, d’API REST et de client Web avec plein de JQuery dedans. Dans sa 3e génération, c’est un ensemble de bibliothèques gérant les protocoles Z-Wave et Taulas pour créer facilement plein de modules domotiques. L’API est documentée sur GitHub. Sagremor, le client Web écrit avec AngularJS, permet de tout piloter.

Angharad web client

Sommaire

Préambule

Il y a quelques deux ans de ça, j’ai parlé de mon système domotique maison à base d’API REST et de client Web avec plein de JQuery dedans. Depuis, j’ai continué ce projet avec entrain et il en est maintenant dans sa 3e génération : Angharad sur GitHub.

Pourquoi 3e génération et pas version 3.0 ? Parce qu’au début, c’était pas mal un serveur autonome, mais avec le temps, c’est devenu un ensemble de logiciels qui forment un écosystème et se parlent entre eux via des protocoles ad hoc.

Pourquoi je n’ai pas parlé de la 2e génération ? Surtout parce qu’elle n’est pas venue en une seule fois ; les idées et les améliorations sont venues petit à petit pendant l’année qui a suivi mon premier journal. Les principales améliorations ont été l’ajout du support de Z-Wave, l’ajout de services Web en PHP pour gérer les photos et les flux d’une instance Motion et les lecteurs de musique avec mpd.

Cheminement

Puis je voyais AngularJS et je voyais aussi que mes API REST étaient quand même pas super propres : que du status 200, même en cas d’erreur, et je me disais que supporter une autre base de données, normaliser par‐ci, uniformiser par‐là aurait été pas mal.

Et puis, je me demandais si les service annexes, caméra et musique, pouvaient être intégrés facilement à mon idée de serveur d’API REST en C, parce que j’aime bien le C.

Et j’ai commencé un nouveau module pour brancher un capteur de température à un Raspberry Pi et y accéder avec une API REST et j’ai trouvé que, même en réutilisant mon code, c’était long et fastidieux pour coder un simple service Web.

Je me suis donc mis à faire des bibliothèques qui me faciliteraient la manipulation des requêtes HTTP (celui‐là, j’en ai déjà parlé il n’y a pas très longtemps), les logs ou encore les requêtes SQL.

Je n’ai pas inventé l’eau chaude non plus, mais quand je cherchais des bibliothèques existantes, je n’en trouvais pas qui me paraissaient simples, efficaces et pas trop lourdes.

Angharad, ça fait quoi concrètement ?

Cela gère les lumières, les thermostats, les interrupteurs, les capteurs, les images des caméras, la musique. Cela automatise tout ça avec des scripts et des tâches planifiées, ça gère des alertes, et ça supervise les données également.

Domotique pure

Pour la partie domotique pure (lumières, interrupteurs, thermostats, capteurs), ça gère le protocole Z-Wave via la bibliothèque Openzwave et une clef USB Z-Wave.

Cela gère aussi le protocole Taulas qui est une évolution du protocole de communication que j’avais mis en place avec les Arduinos du début. Donc en utilisant des Arduinos ou autre chose, du moment que ça respecte le protocole, ça parle avec le serveur.

Monitoring avec Angharad

On peut rajouter d’autres protocoles domotiques si ça nous chante, il « suffit » de programmer sa bibliothèque qui implémente les bonnes fonctions, on la compile, on la copie dans le répertoire dédié, on recharge les modules avec l’API Kivabien© et, hop, on a un nouveau type de périphérique, sans même avoir à relancer le serveur, grâce à la magie de dlopen() et dlsync().

Autres services

There is no IOT, just devices dedicated to a simple task.
Pour les autres services (caméras, musique, etc.), on utilise un principe similaire avec des bibliothèques compilées et chargées pendant l’exécution. Là, le système est plus permissif et autorise à créer ses propres API et faire ses propres accès à la base de données.

Motion

Cela permet d’accéder aux flux temps réel et aux images enregistrées par un service Motion.
Pour accéder aux images, il faut que le serveur Angharad puisse accéder au répertoire sur lequel sont les images Motion, donc un répertoire réseau ou quelque chose du genre.
Pour accéder au flux, c’est directement grâce à l’adresse URL fournie au service. J’ai essayé de proxyfier le flux MJPEG, mais sans grand succès…

MPD

Chez moi, j’ai placé des Raspberry Pi dans pas mal de pièces, branchés sur des haut‐parleurs. La plupart du temps, j’y fais jouer une webradio locale que j’ai créée via LiquidSoap et Icecast. J’ai donc limité les commandes MPD à stop, play, pause, changer le volume et lancer une liste de lecture. Mais, bon, lister les artistes, albums, chansons, fichiers ne serait pas hyper compliqué à gérer.

Jukebox Angharad

Liquidsoap

D’ailleurs, ladite webradio est un peu gérable elle aussi, on a accès aux infos des dix derniers morceaux joués, et on peut faire play, pause, stop et next sur la radio.

Application cliente

On gère sa maison via Sagremor, qui est une application AngularJS 1.5 avec du Bootstrap dedans. Elle permet de manipuler toutes les API. Je ne suis pas très fort en ergonomie et encore moins en design eye candy, mais l’interface a l’air assez intuitive, au moins pour les commandes de base (allumer, éteindre, etc.), pour que ma blonde ou un invité s’en serve sans que j’ai à expliquer.

Pour le coté pratique, j’ai deux tablettes Android Ubislate 7Ci, j’y ai collé un Firefox qui fait tourner l’application cliente, et je les ai placées à chaque entrée chez moi juste à côté de la porte.

J’ai toujours le projet de faire une application cliente Android et, maintenant que j’ai une machine un peu plus récente, j’ai pu m’y mettre. Parce que développer des applications Android quand on ne peut pas lancer l’émulateur Android sur sa machine, c’est pas facile…

Essaye donc !

C’est tout libre, les bibliothèques sont en LGPL, les programmes serveurs GPL v3, l’application cliente est sous licence MIT.

Je n’ai pas la prétention de faire mieux que les autres, comme Domoticz ou Jeedom, juste d’avoir un serveur domotique qui réponde à mes besoins ; et puis c’est un bon moyen d’apprendre des nouvelles technos et de tester des concepts.

J’aimerais bien fédérer des amateurs autour de ce projet, mais je ne sais pas trop par où commencer. S’il y a des curieux pour tester et participer, c’est avec plaisir !

Aller plus loin

  • # Cool

    Posté par  . Évalué à 3. Dernière modification le 30 septembre 2016 à 16:35.

    C'est à la fois excitant, et trop 1984 pour moi… tout le monde veut donc la même musique en même temps chez toi?

    ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

    • [^] # Re: Cool

      Posté par  . Évalué à -1.

      Euh peut-être que tu ne le sais pas mais il me semble que le chauffage, la lumière et les cameras sont deja gérés informatiquement dans plein se bâtiments depuis des lustres…

      La domotique c'est juste de faire la même chose pour les particuliers.

      Donc si ça te fais peur, et bien c'est trop tard hu hu hu.

    • [^] # Re: Cool

      Posté par  (site web personnel) . Évalué à 7.

      Non, c'est pour ca qu'il y a un mpd par rpi/pièce, et pilotables indépendamment, donc tu écoutes un truc dans une pièce et un autre truc dans l'autre, personne n'est gêné…

      De la même manière, tu peux créer autant de webradios que tu veux, dépendamment des ressources de ton système quand même, parce que ca bouffe de la RAM un liquidsoap en fait.

  • # Intéressant

    Posté par  . Évalué à 2.

    Hello,

    Présenté comme ça, ton système est plutôt séduisant ! Mais penses-tu qu'il puisse être adapté à de la « domotique mobile » ? Je m'explique : j'ai l'ambition de créer un système domotique libre complet pour tout ce qui est camions aménagés, camping-car. Le tout sur base rPi avec son écran tactile, avec des fonctions spécifiques donc : alarme à distance avec tracage gps et alerte sms, contrôle de la consommation, de la production d'énergie des panneaux solaires, des niveaux d'eaux propres et usées etc etc, bref tout ce qui puisse servir à la vie nomade. Et j'ai encore plein d'idées, tel que le pilotage et le pointage automatique des panneaux solaires en fonction de la courbe du soleil, application smartphone dédié, etc :)

    A vrai dire, je débute dans le domaine et je n'ai pas encore fait le tour de toutes les solutions libres déjà disponibles. Et partir de zéro tout seul, ça va me prendre des années.

    • [^] # Re: Intéressant

      Posté par  (site web personnel) . Évalué à 0.

      Domoticz ?
      ça tourne sur Rpi :)

    • [^] # Re: Intéressant

      Posté par  (site web personnel) . Évalué à 4.

      Rapidement comme cela ca me parait pas facile. Mon système est autonome mais est basé sur un serveur central qui pilote et monitore les composants.

      Si tu veux y accéder de l'extérieur, il te faut accéder à ce serveur depuis l'extérieur et chez moi ca se fait par ma connexion internet.
      Dans le cas d'une installation nomade, la connexion depuis l'extérieur est plus difficile je pense. Pour une connexion permanente, une connexion 3G et une connexion à un VPN pourrait faire l'affaire, mais ca prend un budget spécifique.
      Sinon pour une connexion plus intermittente, tu peux imaginer un serveur qui, toujours via une connexion 3G, se connecte régulièrement à un service distant et pousse les dernières données, et lise dans une file d'attente les commandes envoyées de manière asynchrones. Puis pour la sécurité gérer une sorte de système d'alarme qui envoie une alerte s'il détecte qu'il se déplace grâce au GPS ou qu'une porte a été ouverte par exemple.

      Ton problème est pas simple parce qu'il y a beaucoup de petits problèmes pas forcément indépendants…

      En tout cas bon courage!

  • # Sympa

    Posté par  (site web personnel) . Évalué à 1.

    Faut vraiment que je me penche dessus car le projet a l'air bien complet !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.